package com.aloda.service;

import com.aloda.dto.user.*;
import com.aloda.entity.User;
import com.aloda.query.SearchPageDTO;
import com.aloda.query.UserCardPageQuery;
import com.aloda.query.UserPageDTO;
import com.aloda.result.PageResult;
import com.aloda.vo.user.*;
import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.util.List;

/**
 * @author aloda
 * @description 针对表【user(用户表)】的数据库操作Service
 * @createDate 2024-12-26 11:26:18
 */
public interface UserService extends IService<User> {

    /**
     * 通过手机号进行注册
     *
     * @param userRegisterDTO
     */
    void registerByPhone(UserRegisterDTO userRegisterDTO);

    /**
     * 通过账号登录
     *
     * @param userLoginDTO
     * @return
     */
    UserLoginVO loginByAccount(UserLoginDTO userLoginDTO);

    /**
     * 通过token获取用户信息
     *
     * @return
     */
    UserInfoVO getUserInfoByToken();

    /**
     * 用户编辑个人信息
     *
     * @param userEditDTO
     */
    void editUserInfo(UserEditDTO userEditDTO);

    /**
     * 用户退出
     *
     * @param request
     */
    void userLogout(HttpServletRequest request);

    /**
     * 分页查询
     *
     * @param userPageDTO
     * @return
     */
    PageResult<UserPageVO> pageQuery(UserPageDTO userPageDTO);

    /**
     * 新增用户
     *
     * @param userAddDTO
     */
    int addUser(UserAddDTO userAddDTO);

    /**
     * 编辑用户
     *
     * @param userEditDTO
     * @return
     */
    int editUser(UserUpdateDTO userEditDTO);

    /**
     * 获取在线用户
     *
     * @return
     */
    List<UserOnlineVO> getOnlineUser();

    /**
     * 重置密码
     *
     * @param id
     */
    void resetPw(Long id);

    /**
     * 强制下线用户
     *
     * @param token
     */
    boolean offlineUser(String token);

    /**
     * 设置用户状态
     *
     * @param status
     * @param id
     */
    void setUserStatus(Integer status, Long id);

    /**
     * 导出用户表格
     *
     * @param response
     * @param ids
     */
    void exportUserToExcel(HttpServletResponse response, List<Long> ids);

    /**
     * 客户端根据关键词搜索
     *
     * @param searchPageDTO
     * @return
     */
    List<UserCardVO> searchUser(SearchPageDTO searchPageDTO);

    /**
     * 通过id获取脱敏用户信息
     *
     * @param id
     * @return
     */
    UserHomePageVO getUserInfoById(Long id);

    /**
     * 滚动分页查询id对应用户的粉丝用户卡片
     *
     * @param userCardPageQuery
     * @return
     */
    List<UserCardVO> getFansPage(UserCardPageQuery userCardPageQuery);

    /**
     * 滚动分页查询id对应用户的关注用户卡片
     *
     * @param userCardPageQuery
     * @return
     */
    List<UserCardVO> getFollowsPage(UserCardPageQuery userCardPageQuery);

    /**
     * 客户端设置应用访问权限
     * @return
     */
    boolean setAppAuth();

    /**
     * 客户端设置收藏访问权限
     * @return
     */
    boolean setCollectAuth();

    /**
     * 客户端修改密码
     * @param userRePwDTO
     * @return
     */
    boolean resetUserPassword(UserRePwDTO userRePwDTO);

    /**
     * 用户通过邮箱注册
     * @param userRegisterByEmailDTO
     */
    boolean registerByEmail(UserRegisterByEmailDTO userRegisterByEmailDTO);
}
